package br.trainee.web.controller;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.component.UIInput;
import javax.faces.component.html.HtmlInputSecret;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlInputTextarea;
import javax.faces.component.html.HtmlSelectBooleanCheckbox;
import javax.faces.component.html.HtmlSelectManyCheckbox;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.component.html.HtmlSelectOneRadio;
import javax.faces.context.FacesContext;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.SelectItem;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;

import br.trainee.web.bo.impl.ClinicaBO;
import br.trainee.web.constraint.service.Cnpj;
import br.trainee.web.constraint.service.Cpf;
import br.trainee.web.constraint.service.EmptyComboBox;
import br.trainee.web.constraint.service.EmptyField;
import br.trainee.web.enumeradores.TipoAcesso;
import br.trainee.web.util.UtilFuncoes;
import br.trainee.web.vo.CidadeVO;
import br.trainee.web.vo.ClinicaVO;
import br.trainee.web.vo.EmailClinicaVO;
import br.trainee.web.vo.EnderecoClinicaVO;
import br.trainee.web.vo.EstadoVO;
import br.trainee.web.vo.TelefoneClinicaVO;
import br.trainee.web.vo.TipoTelefoneVO;

@Named("clinicaOld")
@ViewScoped
public class ClinicaBeanOld implements Serializable{

	private static final long serialVersionUID = 1L;
	//ATRIBUTOS INCLUSÃO
	@EmptyField
	private String nomeClinicaInc;
	@EmptyField
	private String descricaoClinicaInc;
	@EmptyField
	private String sexoInc;
	private List<SelectItem> listaSexoInc;
	@EmptyField
	private List<String>  listaDeficiencia;
	private List<SelectItem>  listaDeficienciaInc;
	@EmptyField
	private Boolean lembrarSenhaInc;
	
	private Integer codigoEstadoInc;
	private List<SelectItem> listaEstadosInc;
	
	@EmptyComboBox
	private Integer codigoCidadeInc;
	private List<SelectItem> listaCidadesInc;
	
	@EmptyComboBox
	private Integer codigoTipoTelefoneInc;
	private List<SelectItem> listaTipoTelefoneInc;
	
	@EmptyField
	private String senhaInc;
	private String flagInc;
	
	@EmptyField
	@Max(value=100, message="Idade máxima excedida")
	@Min(value=18, message="Idade minima de 18 anos")
	private Integer idadeInc;
	@EmptyField
	private Date dataNascimentoInc;
	@EmptyField
	private Double salarioInc;
	@EmptyField
	@Cpf
	private String cpfInc;
	@EmptyField
	@Cnpj
	private String cnpjInc;
	
	private DefaultStreamedContent conteudoImagemInc;
	
	//ATRIBUTOS DE ALTERAÇÃO
	private ClinicaVO clinicaSelecionadaAlt;
	
	//ATRIBUTOS CONSULTA
	private List<ClinicaVO> listaClinicaCon;
	private ClinicaVO clinicaSelecionadaCon;
	private List<TelefoneClinicaVO> listaTelefonesCon;
	private List<EmailClinicaVO> listaEmailsCon;
	private List<EnderecoClinicaVO> listaEnderecosCon;
	private String nomeClinicaCon;
	private String cnpjClinicaCon;

	//Bindings de campos da tela de inclusão
	private HtmlInputText campoNomeClinicaInc;
	private HtmlSelectOneRadio campoRadioSexoInc;
	private HtmlInputSecret campoSenhaClinicaInc;
	private HtmlInputTextarea campoDescricaoClinicaInc;
	private HtmlSelectManyCheckbox campoNomeDeficienciaInc;
	private HtmlSelectOneMenu campoEstadoInc;
	private HtmlSelectOneMenu campoCidadeInc;
	private HtmlSelectOneMenu campoTipoTelefoneInc;
	private HtmlSelectBooleanCheckbox campoLembrarSenhaInc;
	private HtmlInputText campoIdadeInc;
	private HtmlInputText campoSalarioInc;
	private HtmlInputText campoCpfInc;
	private HtmlInputText campoCnpjInc;
	private HtmlInputText campoDataNascimentoInc;
	
	
	//@Inject
	private ClinicaBO bo;
	
	public void pesquisarClinica(){
		
		//this.listaClinicaCon = bo.consultarTodosClinica(nomeClinicaCon, cnpjClinicaCon);
	}
	
	public void detalharClinica(){
		
		//ClinicaVO clinica = bo.detalharClinica(clinicaSelecionadaCon.getIdClinica());
		
		//listaEmailsCon = clinica.getEmails();
		//listaTelefonesCon = clinica.getTelefones();
		//listaEnderecosCon = clinica.getEnderecos();
	}
	
	public void limparCamposFormularioInc(){
		
		campoNomeClinicaInc.setSubmittedValue("");
		campoRadioSexoInc.setSubmittedValue("M");
		campoSenhaClinicaInc.setSubmittedValue("");
		campoDescricaoClinicaInc.setSubmittedValue("");
		campoNomeDeficienciaInc.setSubmittedValue(new String[] {});
		campoEstadoInc.setSubmittedValue("0");
		campoCidadeInc.setSubmittedValue("0");
		campoCidadeInc.setDisabled(true);
		campoTipoTelefoneInc.setSubmittedValue("0");
		campoLembrarSenhaInc.setSubmittedValue(false);
		campoIdadeInc.setSubmittedValue("");
		campoSalarioInc.setSubmittedValue("");
		campoCpfInc.setSubmittedValue("");
		campoCnpjInc.setSubmittedValue("");
		campoDataNascimentoInc.setSubmittedValue("");
		
	}
	
	public void buscarCidadesPorEstado(AjaxBehaviorEvent evento){
		 
		UIInput comboEstado = (UIInput) evento.getComponent();
		Integer codEstado = (Integer) comboEstado.getValue();
		
		listaCidadesInc = new ArrayList<SelectItem>();
		
		if(!codEstado.equals(0)){
		
			/*List<CidadeVO> listaCidades = bo.consultarCidadePorEstado(codEstado.longValue());
			
			for (CidadeVO cidade : listaCidades) {
				
				listaCidadesInc.add(new SelectItem(cidade.getIdCidade(), cidade.getNomeCidade()));
			}	*/
		}
	}

	public void enviarImagem(FileUploadEvent evento) throws IOException{
		
		conteudoImagemInc = new DefaultStreamedContent(evento.getFile().getInputstream());
	}
	


	@PostConstruct
	public void incializarTela() throws IOException{
		
		String action = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(UtilFuncoes.PARAM_ENTRADA);
		
		if(action != null){
			
			
			
			if(action.trim().equals(TipoAcesso.INCLUIR.getAcesso())){
				
				flagInc = "2";
				this.sexoInc = "M";
				
				listaSexoInc = new ArrayList<SelectItem>();
				
				listaSexoInc.add(new SelectItem("M", "Masculino"));
				listaSexoInc.add(new SelectItem("F", "Feminino"));
				listaSexoInc.add(new SelectItem("O", "Outros"));
				
				listaDeficienciaInc = new ArrayList<SelectItem>();
				
				listaDeficienciaInc.add(new SelectItem("F", "Fisica"));
				listaDeficienciaInc.add(new SelectItem("M", "Mental"));
				
				/*List<EstadoVO> listaEstados = bo.consultarTodosEstados();
				listaEstadosInc = new ArrayList<SelectItem>();
				
				for (EstadoVO estado : listaEstados) {
					
					listaEstadosInc.add(new SelectItem(estado.getIdEstado(), estado.getNomeEstado()));
				}
				
				List<TipoTelefoneVO> listaTipoTelefone = bo.consultarTodosTiposTelefones();
				listaTipoTelefoneInc = new ArrayList<SelectItem>();
				
				for (TipoTelefoneVO tipoTelefone : listaTipoTelefone) {
					
					listaTipoTelefoneInc.add(new SelectItem(tipoTelefone.getIdTipoTelefone(), tipoTelefone.getDescricao()));
				}*/
				
				/*
				listaEstadosInc = new ArrayList<SelectItem>();
				listaEstadosInc.add(new SelectItem(1, "São Paulo"));
				listaEstadosInc.add(new SelectItem(2, "Rio de Janeiro"));
				*/
			}
			else if(action.trim().equals(TipoAcesso.ALTERAR.getAcesso())){
				
				String idClinciaTexto = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("idClinica");
				
				Long idClinica = Long.valueOf(idClinciaTexto);
				
				clinicaSelecionadaAlt = bo.consultarPorId(idClinica);
				
			}
			else if(action.trim().equals(TipoAcesso.CONSULTAR.getAcesso())){
				
				
			}
			else{
				FacesContext.getCurrentInstance().getExternalContext().redirect(
				FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()
				+ "/jsf-pages/erros/erro404.html");
			}
		}
		else{
			FacesContext.getCurrentInstance().getExternalContext().redirect(
			FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()
			+ "/jsf-pages/erros/erro404.html");
		}
	
	}
	
	public void enviarFormulario(){
		
		System.out.println("valor do combo:" + codigoEstadoInc);
	}
	
	
	
	

	public HtmlInputSecret getCampoSenhaClinicaInc() {
		return campoSenhaClinicaInc;
	}

	public void setCampoSenhaClinicaInc(HtmlInputSecret campoSenhaClinicaInc) {
		this.campoSenhaClinicaInc = campoSenhaClinicaInc;
	}

	public String getNomeClinicaInc() {
		return nomeClinicaInc;
	}

	public void setNomeClinicaInc(String nomeClinicaInc) {
		this.nomeClinicaInc = nomeClinicaInc;
	}
	 
	
	public HtmlInputText getCampoNomeClinicaInc() {
		return campoNomeClinicaInc;
	}

	public void setCampoNomeClinicaInc(HtmlInputText campoNomeClinicaInc) {
		this.campoNomeClinicaInc = campoNomeClinicaInc;
	}

	
	public List<TelefoneClinicaVO> getListaTelefonesCon() {
		return listaTelefonesCon;
	}

	public void setListaTelefonesCon(List<TelefoneClinicaVO> listaTelefonesCon) {
		this.listaTelefonesCon = listaTelefonesCon;
	}

	public List<EmailClinicaVO> getListaEmailsCon() {
		return listaEmailsCon;
	}

	public void setListaEmailsCon(List<EmailClinicaVO> listaEmailsCon) {
		this.listaEmailsCon = listaEmailsCon;
	}

	public List<EnderecoClinicaVO> getListaEnderecosCon() {
		return listaEnderecosCon;
	}

	public void setListaEnderecosCon(List<EnderecoClinicaVO> listaEnderecosCon) {
		this.listaEnderecosCon = listaEnderecosCon;
	}

	public ClinicaVO getClinicaSelecionadaAlt() {
		return clinicaSelecionadaAlt;
	}

	public void setClinicaSelecionadaAlt(ClinicaVO clinicaSelecionadaAlt) {
		this.clinicaSelecionadaAlt = clinicaSelecionadaAlt;
	}

	public ClinicaVO getClinicaSelecionadaCon() {
		return clinicaSelecionadaCon;
	}

	public void setClinicaSelecionadaCon(ClinicaVO clinicaSelecionadaCon) {
		this.clinicaSelecionadaCon = clinicaSelecionadaCon;
	}

	public List<ClinicaVO> getListaClinicaCon() {
		return listaClinicaCon;
	}

	public void setListaClinicaCon(List<ClinicaVO> listaClinicaCon) {
		this.listaClinicaCon = listaClinicaCon;
	}

	public HtmlInputTextarea getCampoDescricaoClinicaInc() {
		return campoDescricaoClinicaInc;
	}

	public void setCampoDescricaoClinicaInc(
			HtmlInputTextarea campoDescricaoClinicaInc) {
		this.campoDescricaoClinicaInc = campoDescricaoClinicaInc;
	}

	public HtmlSelectManyCheckbox getCampoNomeDeficienciaInc() {
		return campoNomeDeficienciaInc;
	}

	public void setCampoNomeDeficienciaInc(
			HtmlSelectManyCheckbox campoNomeDeficienciaInc) {
		this.campoNomeDeficienciaInc = campoNomeDeficienciaInc;
	}

	public HtmlSelectOneMenu getCampoEstadoInc() {
		return campoEstadoInc;
	}

	public void setCampoEstadoInc(HtmlSelectOneMenu campoEstadoInc) {
		this.campoEstadoInc = campoEstadoInc;
	}

	public HtmlSelectOneMenu getCampoCidadeInc() {
		return campoCidadeInc;
	}

	public void setCampoCidadeInc(HtmlSelectOneMenu campoCidadeInc) {
		this.campoCidadeInc = campoCidadeInc;
	}

	public HtmlSelectOneMenu getCampoTipoTelefoneInc() {
		return campoTipoTelefoneInc;
	}

	public void setCampoTipoTelefoneInc(HtmlSelectOneMenu campoTipoTelefoneInc) {
		this.campoTipoTelefoneInc = campoTipoTelefoneInc;
	}

	public HtmlSelectBooleanCheckbox getCampoLembrarSenhaInc() {
		return campoLembrarSenhaInc;
	}

	public void setCampoLembrarSenhaInc(
			HtmlSelectBooleanCheckbox campoLembrarSenhaInc) {
		this.campoLembrarSenhaInc = campoLembrarSenhaInc;
	}

	public HtmlInputText getCampoIdadeInc() {
		return campoIdadeInc;
	}

	public void setCampoIdadeInc(HtmlInputText campoIdadeInc) {
		this.campoIdadeInc = campoIdadeInc;
	}

	public HtmlInputText getCampoSalarioInc() {
		return campoSalarioInc;
	}

	public void setCampoSalarioInc(HtmlInputText campoSalarioInc) {
		this.campoSalarioInc = campoSalarioInc;
	}

	public HtmlInputText getCampoCpfInc() {
		return campoCpfInc;
	}

	public void setCampoCpfInc(HtmlInputText campoCpfInc) {
		this.campoCpfInc = campoCpfInc;
	}

	public HtmlInputText getCampoCnpjInc() {
		return campoCnpjInc;
	}

	public void setCampoCnpjInc(HtmlInputText campoCnpjInc) {
		this.campoCnpjInc = campoCnpjInc;
	}

	public HtmlInputText getCampoDataNascimentoInc() {
		return campoDataNascimentoInc;
	}

	public void setCampoDataNascimentoInc(HtmlInputText campoDataNascimentoInc) {
		this.campoDataNascimentoInc = campoDataNascimentoInc;
	}

	public HtmlSelectOneRadio getCampoRadioSexoInc() {
		return campoRadioSexoInc;
	}

	public void setCampoRadioSexoInc(HtmlSelectOneRadio campoRadioSexoInc) {
		this.campoRadioSexoInc = campoRadioSexoInc;
	}

	public List<SelectItem> getListaCidadesInc() {
		return listaCidadesInc;
	}



	public void setListaCidadesInc(List<SelectItem> listaCidadesInc) {
		this.listaCidadesInc = listaCidadesInc;
	}



	public Integer getCodigoCidadeInc() {
		return codigoCidadeInc;
	}



	public void setCodigoCidadeInc(Integer codigoCidadeInc) {
		this.codigoCidadeInc = codigoCidadeInc;
	}



	public Integer getCodigoTipoTelefoneInc() {
		return codigoTipoTelefoneInc;
	}



	public void setCodigoTipoTelefoneInc(Integer codigoTipoTelefoneInc) {
		this.codigoTipoTelefoneInc = codigoTipoTelefoneInc;
	}



	public List<SelectItem> getListaTipoTelefoneInc() {
		return listaTipoTelefoneInc;
	}



	public void setListaTipoTelefoneInc(List<SelectItem> listaTipoTelefoneInc) {
		this.listaTipoTelefoneInc = listaTipoTelefoneInc;
	}



	public DefaultStreamedContent getConteudoImagemInc() {
		return conteudoImagemInc;
	}


	public void setConteudoImagemInc(DefaultStreamedContent conteudoImagemInc) {
		this.conteudoImagemInc = conteudoImagemInc;
	}


	public String getCnpjInc() {
		return cnpjInc;
	}


	public void setCnpjInc(String cnpjInc) {
		this.cnpjInc = cnpjInc;
	}


	public String getCpfInc() {
		return cpfInc;
	}


	public void setCpfInc(String cpfInc) {
		this.cpfInc = cpfInc;
	}


	public Double getSalarioInc() {
		return salarioInc;
	}


	public void setSalarioInc(Double salarioInc) {
		this.salarioInc = salarioInc;
	}


	public Date getDataNascimentoInc() {
		return dataNascimentoInc;
	}


	public void setDataNascimentoInc(Date dataNascimentoInc) {
		this.dataNascimentoInc = dataNascimentoInc;
	}


	public Integer getIdadeInc() {
		return idadeInc;
	}


	public void setIdadeInc(Integer idadeInc) {
		this.idadeInc = idadeInc;
	}


	public String getFlagInc() {
		return flagInc;
	}


	public void setFlagInc(String flagInc) {
		this.flagInc = flagInc;
	}


	public String getSenhaInc() {
		return senhaInc;
	}


	public void setSenhaInc(String senhaInc) {
		this.senhaInc = senhaInc;
	}


	public List<SelectItem> getListaEstadosInc() {
		return listaEstadosInc;
	}


	public void setListaEstadosInc(List<SelectItem> listaEstadosInc) {
		this.listaEstadosInc = listaEstadosInc;
	}


	public Integer getCodigoEstadoInc() {
		return codigoEstadoInc;
	}


	public void setCodigoEstadoInc(Integer codigoEstadoInc) {
		this.codigoEstadoInc = codigoEstadoInc;
	}


	public Boolean getLembrarSenhaInc() {
		return lembrarSenhaInc;
	}


	public void setLembrarSenhaInc(Boolean lembrarSenhaInc) {
		this.lembrarSenhaInc = lembrarSenhaInc;
	}


	public List<SelectItem> getListaDeficienciaInc() {
		return listaDeficienciaInc;
	}


	public void setListaDeficienciaInc(List<SelectItem> listaDeficienciaInc) {
		this.listaDeficienciaInc = listaDeficienciaInc;
	}


	public List<String> getListaDeficiencia() {
		return listaDeficiencia;
	}


	public void setListaDeficiencia(List<String> listaDeficiencia) {
		this.listaDeficiencia = listaDeficiencia;
	}


	public ClinicaBO getBo() {
		return bo;
	}


	public void setBo(ClinicaBO bo) {
		this.bo = bo;
	}


	public List<SelectItem> getListaSexoInc() {
		return listaSexoInc;
	}


	public void setListaSexoInc(List<SelectItem> listaSexoInc) {
		this.listaSexoInc = listaSexoInc;
	}


	public String getSexoInc() {
		return sexoInc;
	}


	public void setSexoInc(String sexoInc) {
		this.sexoInc = sexoInc;
	}


	public String getDescricaoClinicaInc() {
		return descricaoClinicaInc;
	}


	public void setDescricaoClinicaInc(String descricaoClinicaInc) {
		this.descricaoClinicaInc = descricaoClinicaInc;
	}

	public String getNomeClinicaCon() {
		return nomeClinicaCon;
	}

	public void setNomeClinicaCon(String nomeClinicaCon) {
		this.nomeClinicaCon = nomeClinicaCon;
	}

	public String getCnpjClinicaCon() {
		return cnpjClinicaCon;
	}

	public void setCnpjClinicaCon(String cnpjClinicaCon) {
		this.cnpjClinicaCon = cnpjClinicaCon;
	}

	
	
}
